home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / taropyon / guilib3 / inc / event.h < prev    next >
C/C++ Source or Header  |  1993-11-30  |  11KB  |  321 lines

  1. /*    :*****************************************************************
  2.     :    "event.h"     :    system“Pride”イベント・ライブラリ
  3.     :*****************************************************************
  4. */
  5. #ifndef    _EVENT_H
  6. #define    _EVENT_H
  7.  
  8. #include    <time.h>
  9.  
  10. #ifndef    _GUIDEFS_H
  11. #    include    "guidefs.h"
  12. #endif
  13.  
  14. #define    EVT_CANCEL    (-1)
  15. #define    EVT_BREAK    (-2)
  16.  
  17. typedef    struct _evtkeycmd_t
  18. {
  19.     struct _evtkeycmd_t        *next;
  20.     USHORT                    ec1;        /* キーコード#1    */
  21.     SHORT                    ec2;        /* キーコード#2    */
  22.     int                        cmd;        /* コマンドNo.    */
  23.     int                        (*func)();
  24.     void                    *ptr;
  25.     CONST char                *msg;
  26. } EVTKEYCMD_T;
  27.  
  28. #define    EVTKEY_HASH_MAX    (16)
  29.  
  30. typedef    struct
  31. {
  32.     EVTKEYCMD_T    *key[EVTKEY_HASH_MAX];    /* 1ストロークタイプ    */
  33.     EVTKEYCMD_T    *pfx[EVTKEY_HASH_MAX];    /* 2ストロークタイプ    */
  34. } EVTKEYTBL_T;
  35.  
  36.  
  37. typedef    struct    _evtsbj_t
  38. {
  39.     int        no;                    /* イベントNo                            */
  40.     int        page;                /* 書き込みページ                        */
  41.     int        typ;                /* イベントタイプ(マウス or キー)        */
  42.     int        (*func)(int,struct _evtsbj_t *);
  43.                                 /* イベント処理関数                        */
  44.     void    *ptr;                /* 汎用パラメータポインタ                */
  45.     union
  46.     {    struct                    /* マウスイベント                        */
  47.         {    UCHAR    attr;        /* 属性                                    */
  48.             UCHAR    btn;        /* ボタン                                */
  49.             FRAME    fr;            /* 座標                                    */
  50.         } mos;
  51.         struct                    /* キーイベント                            */
  52.         {    UCHAR    attr;        /* 属性                                    */
  53.             USHORT    ec;            /* キーアドレス                            */
  54.             USHORT    ch;            /* キャラクターコード                    */
  55.         } key;
  56.         EVTKEYTBL_T    *keyTbl;    /* キーテーブル                            */
  57.     } ev;
  58. } EVTSBJ_T;
  59. #define    EVT_SBJ    EVTSBJ_T
  60.  
  61. typedef    struct _evt_t
  62. {
  63.     struct _evt_t    *back;
  64.     struct _evt_t    *next;
  65.     int                n;
  66.     EVTSBJ_T        *sbj;
  67. } EVT_T;
  68.  
  69. #define    EVT_WORK    EVT_T
  70.  
  71. /*------------------------------------------------------------------*/
  72. /*    イベント種別                                                    */
  73. /*------------------------------------------------------------------*/
  74. #define    EVTYPE_OFF        (0)    /* OFF                        */
  75. #define    EVTYPE_KEY        (1)    /* キーイベント                */
  76. #define    EVTYPE_MOUSE    (2)    /* マウスイベント            */
  77. #define    EVTYPE_MOS2        (3)    /* page 0 用マウスイベント    */
  78. #define    EVTYPE_KEYTBL    (4)    /* キーテーブル用            */
  79.  
  80. /*------------------------------------------------------------------*/
  81. /*    イベント抑制                                                    */
  82. /*------------------------------------------------------------------*/
  83. #define    EVTIGN_MOUSE    (1)        /* マウスイベント禁止    */
  84. #define    EVTIGN_KEY        (2)        /* キーイベント禁止        */
  85.  
  86.  
  87. /*------------------------------------------------------------------*/
  88. /*    キーイベント用                                                    */
  89. /*------------------------------------------------------------------*/
  90. #define    KEYEVT_ADR        (0)        /* キーアドレスが一致        */
  91. #define    KEYEVT_SHIFT    (1)        /* キーアドレス&シフト状態    */
  92. #define    KEYEVT_ISCHA    (0x10)    /* 一般文字                    */
  93. #define    KEYEVT_ISCTRL    (0x11)    /* コントール                */
  94. #define    KEYEVT_ISDIGIT    (0x12)    /* 数値                        */
  95. #define    KEYEVT_ISALPHA    (0x13)    /* アルファベット            */
  96.  
  97. /*------------------------------------------------------------------*/
  98. /*    マウスイベント用                                                */
  99. /*------------------------------------------------------------------*/
  100. #define    BTN_LEFT        (1)
  101. #define    BTN_RIGHT        (2)
  102. #define    MOSEVT_BTN        (0x01)    /* ボタンタイプ                    */
  103. #define    MOSEVT_NOT        (0x02)    /* ボタン反転タイプ                */
  104. #define    MOSEVT_NOACT    (0x03)    /* ボタン選択アクションなし        */
  105. #define    MOSEVT_AREA        (0x04)    /* 指定エリア                    */
  106. #define    MOSEVT_OUTAREA    (0x05)    /* 指定エリア外                    */
  107. #define    MOSEVT_BTNOLY    (0x06)    /* ボタンが押された場合            */
  108. #define    MOSEVT_MOVE        (0x07)    /* カーソルに移動があった場合    */
  109. #define    MOSEVT_OUTBTN    (0x08)    /* 範囲外でボタンON                */
  110.  
  111. #define    MOSEVT_REPEAT    (0x10)    /* リピートタイプ(ボタン)        */
  112. #define    MOSEVT_QUICK    (0x10)    /* クイックタイプ(リピートと同じ)    */
  113.  
  114.  
  115. /*------------------------------------------------------------------*/
  116. /*    アイドリング処理用                                                */
  117. /*------------------------------------------------------------------*/
  118. typedef    struct    _idl_t            /* アイドリング処理構造体    */
  119. {    struct _idl_t    *next;
  120.     struct _idl_t    *back;
  121.     int                ignore;
  122.     clock_t            clk;        /* インターバル    */
  123.     clock_t            last_clk;    /* ワーク        */
  124.     void            (*func)(clock_t);
  125.     void            *ptr;
  126.     char            *name;        /* メッセージ    */
  127. } IDL_T;
  128.  
  129. #define    EVT_IDL_MAX_CLOCK    (24*60*60*CLOCKS_PER_SEC)
  130. #define    EVT_IDL_CLOCK()        (clock()%EVT_IDL_MAX_CLOCK)
  131.  
  132. /*    "evtidl01.c"    ------------------------------------------------*/
  133. extern    IDL_T    *EVT_idl_set( IDL_T *basIdl, UINT clk, void (*func)(clock_t));
  134.  
  135. /*    "evtidl02.c"    ------------------------------------------------*/
  136. extern    void    EVT_idl_unset( IDL_T *idl );
  137.  
  138. /*    "evtidl03.c"    ------------------------------------------------*/
  139. extern    void    EVT_idl_start( IDL_T *idl );
  140.  
  141. /*    "evtidl04.c"    ------------------------------------------------*/
  142. extern    void    EVT_idl_stop( IDL_T *idl );
  143.  
  144. /*    "evtidl10.c"    ------------------------------------------------*/
  145. extern    void    EVT_idl(void);
  146.  
  147. /*    "evt010.c"        ------------------------------------------------*/
  148. extern    EVT_T    *EVT_alloc( EVT_T *basEvt, int n );
  149.  
  150. /*    "evt011.c"        ------------------------------------------------*/
  151. extern    void    EVT_free( EVT_T *evt );
  152.  
  153. /*    "evt012.c"        ------------------------------------------------*/
  154. extern    void    EVT_freeAll( EVT_T *evt );
  155.  
  156. /*    "evt013.c"        ------------------------------------------------*/
  157. extern    int        EVT_link( EVT_T *evt1, EVT_T *evt2 );
  158.  
  159. /*    "evt014.c"        ------------------------------------------------*/
  160. extern    int        EVT_unlink( EVT_T *evt1, EVT_T *evt2 );
  161.  
  162. /*    "evt015.c"        ------------------------------------------------*/
  163. extern    void    EVT_unset( EVT_T *evt, int evt_no );
  164.  
  165. /*    "evt016.c"        ------------------------------------------------*/
  166. extern    int        EVT_pointMove ( EVT_T *evt, int page, int newX, int newY, int oldX, int oldY );
  167.  
  168. /*    "evt020.c"        ------------------------------------------------*/
  169. typedef    struct
  170. {
  171.     int        evtPos;
  172.     int        evtNo;
  173.     int        page;
  174.     int        attr;
  175.     int        btn;
  176.     FRAME    fr;
  177.     int        (*func)(int,EVTSBJ_T *);
  178.     void    *ptr;
  179. } EVTSETMOS_T;
  180. extern    int        EVT_setMos( EVT_T *evt, EVTSETMOS_T *para );
  181.  
  182. #define    _EVT_SETMOS(_evt,_evtPos,_evtNo,_attr,_btn,_x1,_y1,_x2,_y2,_func,_ptr)    {    \
  183.     EVTSETMOS_T        _para =                    \
  184.     {    (_evtPos),                            \
  185.         (_evtNo),                            \
  186.         DspCtrl.writePage,                    \
  187.         (_attr),                            \
  188.         (_btn),                                \
  189.         {(_x1),(_y1),(_x2),(_y2) },            \
  190.         (int (*)(int, EVTSBJ_T *))(_func),    \
  191.         (_ptr)                                \
  192.     };                                        \
  193.     EVT_setMos( (_evt), &_para );            \
  194. }
  195. #define    _EVT_SETMOS_FR(_evt,_evtPos,_evtNo,_attr,_btn,_fr,_func,_ptr)    {    \
  196.     EVTSETMOS_T        _para =                            \
  197.     {    (_evtPos),                                    \
  198.         (_evtNo),                                    \
  199.         DspCtrl.writePage,                            \
  200.         (_attr),                                    \
  201.         (_btn),                                        \
  202.         {(_fr)->x1,(_fr)->y1,(_fr)->x2,(_fr)->y2 },    \
  203.         (int (*)(int, EVTSBJ_T *))(_func),            \
  204.         (_ptr)                                        \
  205.     };                                                \
  206.     EVT_setMos( (_evt), &_para );                    \
  207. }
  208.  
  209. /*    "evt021.c"        ------------------------------------------------*/
  210. extern    int        EVT_set_mos( EVT_T *evt, int evtPos, int evtNo, int attr, int btn,
  211.                      int x1, int y1, int x2, int y2,
  212.                      int (*func)(int,EVTSBJ_T *), void *ptr );
  213.  
  214. /*    "evt022.c"        ------------------------------------------------*/
  215. extern    int        EVT_set_mos2( EVT_T *evt, int evt_no, int no, int attr, int btn,
  216.                      int x1, int y1, int x2, int y2,
  217.                      int (*func)(int,EVTSBJ_T *), void *ptr );
  218.  
  219. /*    "evt023.c"        ------------------------------------------------*/
  220. extern    void    EVT_mos_waitBO(void);
  221.  
  222. /*    "evt024.c"        ------------------------------------------------*/
  223. extern    size_t    EvtMosDoubleClickClock;
  224. extern    int        EVT_mos_clickCheck( EVTSBJ_T *sbj );
  225.  
  226. /*    "evt030.c"        ------------------------------------------------*/
  227. typedef    struct
  228. {
  229.     int        evtPos;
  230.     int        evtNo;
  231.     int        page;
  232.     int        attr;
  233.     UINT    ch;
  234.     UINT    ec;
  235.     int        (*func)(int,EVTSBJ_T *);
  236.     void    *ptr;
  237. } EVTSETKEY_T;
  238. extern    int        EVT_setKey( EVT_T *evt, EVTSETKEY_T *para );
  239.  
  240. #define    _EVT_SETKEY(_evt,_evtPos,_evtNo,_attr,_ch,_ec,_func,_ptr)    {    \
  241.     EVTSETKEY_T    _para =                            \
  242.     {    (_evtPos),                                \
  243.         (_evtNo),                                \
  244.         DspCtrl.writePage,                        \
  245.         (_attr),                                \
  246.         (_ch),                                    \
  247.         (_ec),                                    \
  248.         (int (*)(int,EVTSBJ_T *))(_func),        \
  249.         (_ptr)                                    \
  250.     };                                            \
  251.     EVT_setKey((_evt), &_para );                \
  252. }
  253.  
  254. /*    "evt031.c"        ------------------------------------------------*/
  255. extern    int        EVT_set_key( EVT_T *evt, int evtPos, int evtNo, int attr,
  256.                      int ch, UINT ec, int (*func)(int,EVTSBJ_T *), void *ptr );
  257.  
  258. /*    "evt040.c"        ------------------------------------------------*/
  259. extern    int        EVT_chk( EVT_T *rootEvt, UINT evtFlag );
  260.  
  261. /*    "evt041.c"        ------------------------------------------------*/
  262. extern    int        EVT_chkCall( EVT_T *rootEvt, UINT evtFlag, void (*func)(EVTSBJ_T *,int,void *), void *ptr );
  263.  
  264. /*    "evt042.c"        ------------------------------------------------*/
  265. extern    int        EVT_send_key( EVT_T *rootEvt, int ch, UINT ec );
  266.  
  267. /*    "evtmsk.c"        ------------------------------------------------*/
  268. extern    void    EVT_setMosMaskArea( int x1, int y1, int x2, int y2 );
  269. extern    void    EVT_clearMosMaskArea(void);
  270.  
  271.  
  272. /*    キーテーブル    ================================================*/
  273. extern    int        EVT_set_keyTbl( EVT_T *, int, int, EVTKEYTBL_T *, int (*)(int,EVTSBJ_T *), void *);
  274.  
  275. extern    EVTKEYCMD_T    *EVT_keyTbl_getKey( EVTKEYTBL_T *, UINT);
  276. extern    int             EVT_keyTbl_setKey( EVTKEYTBL_T *, UINT, int, int (*)(), CONST char *);
  277. extern    EVTKEYCMD_T    *EVT_keyTbl_getPfx( EVTKEYTBL_T *, UINT, UINT);
  278. extern    int             EVT_keyTbl_setPfx( EVTKEYTBL_T *, UINT, UINT, int, int (*)(), CONST char *);
  279.  
  280.  
  281. /*    "evtrec.c"        ------------------------------------------------*/
  282. typedef    struct
  283. {    UCHAR            cnt;    /* カウント    */
  284.     UCHAR            p0;
  285.     USHORT            p1, p2;
  286. } EVT_BUF;
  287.  
  288. typedef    struct
  289. {    int            len;
  290.     int            crt;
  291.     EVT_BUF        *ebuf;
  292.     char        p[1];
  293. } EVT_PLY;
  294.  
  295. #define    SIZEOF_EVTPLY(evtPly)    (sizeof(EVT_PLY)+(((evtPly)->len) * sizeof(EVT_BUF)))
  296. #define    EVT_COPYPLY(toPly,fromPly)    {memcpy(toPly,fromPly,SIZEOF_EVTPLY(fromPly));(toPly)->ebuf = (EVT_BUF *)((toPly)->p);}
  297.  
  298. #define    EVTREC_ATT_KEY    (1)
  299. #define    EVTREC_ATT_MOS    (2)
  300.  
  301. #define    EVTREQ_OFF            (0)
  302. #define    EVTREQ_REC_START    (1)    /* ログ保存開始        */
  303. #define    EVTREQ_REC            (2)
  304. #define    EVTREQ_PLAY_START    (3)    /* ログ再生開始        */
  305. #define    EVTREQ_PLAY            (4)
  306. #define    EVTREQ_END            (5)    /* 記録/再生終了    */
  307. #define    EVTREQ_OVER            (9)    /* エラー            */
  308.  
  309. extern    int        EvtReq;
  310.  
  311. extern    int        EVT_recStart(int att);
  312. extern    EVT_PLY    *EVT_recEnd(void);
  313. extern    int        EVT_recStop(void);
  314. extern    int        EVT_playStart( EVT_PLY *eply );
  315.  
  316. extern    int        EVT_mos_pget( int *x, int *y);
  317. extern    int        EVT_getkey( UINT *ec );
  318. extern    int        EVT_kbhit(void);
  319.  
  320. #endif
  321.